因為 JSON 的關係,陣列及物件是現今在數組表示法裡最流行的方法。解構賦值是 ES6 新增的特性,能讓數組在處理上更為方便。
傳統上,我們需要一個一個將屬型從物件中取出,並賦予到變數中
let JK = {
name: 'JKchan',
age: 16
}
let name = JK.name;
let age = JK.age;
而當屬性多達好幾十個甚至百個的時候就必須一個一個慢慢用,所以 ES6 就藉由這個方法來改善此情況。
解構指的是左邊的被賦予值的變數;賦值指的是右邊的數組;而解構賦值合起來就是將右側的資料直接賦予在左側的變數上。
let JK = {
name: 'JKchan',
age: 16
}
let { name, age } = JK;
console.log(name, age); // JKchan 16
name
和 age
直接取出 JK.name
和 JK.age
得值賦予在他們自己身上
這個也挺有趣的,當你可能在宣告後又想改變值可以用。開發上我還沒用過就是了...
let JK = {
name: 'JKchan',
age: 16
}
let name = "JKsama";
let age = 18;
({ name, age } = JK);
console.log(name, age); // JKchan 16
上面的 name
和 age
已經被宣告了,但是我突然想改掉他的值,賦予他物件內的值。
使用()來將解構賦值的語句包裝在裡面。
以下面這個範例來說,當屬性沒有這麼多的時候會以 undefined
來賦予
let JK = {
name: 'JKchan',
age: 16
}
let { name, age, address } = JK;
console.log(name, age, address); // JKchan 16 undefined
在 ES6 中可以用等號賦予預設值,避免出現 undefined
造成錯誤。
let { name, age, address = 'Tokyo'} = JK;
console.log(name, age, address); // JKchan 16 Tokyo
基本上跟物件的一樣
let JK = ['JKchan', 16];
let [name, age] = JK;
console.log(name, age); // JKchan 16
不過陣列的可以跳過不需要得值,使用逗號區隔就行了
let JK = ['JKchan', 16];
let [,age] = JK;
console.log(age); // 16
在陣列型式中想要修改已經被賦予得值的話可以不須使用()括號。
let JK = ['JKchan', 16];
let name = JKsama;
let age = 18;
[name, age] = JK;
console.log(name, age); // JKchan 16
最後,預設值的話用法跟物件型式的寫法相同。
let JK = ['JKchan'];
let [name, age = 16] = JK;
console.log(name, age); // JKchan 16
解構賦值其實還有更複雜的東西,例如帶參數的寫法,對解構賦值有更深入興趣得可以了解看看,畢竟我也不是很理解那個...